package main

import (
	"fm/api"
	"fm/database"
	"github.com/gin-gonic/gin"
	"log"
)

func init() {
	log.SetFlags(log.LstdFlags | log.Lmicroseconds)
	log.SetPrefix("[DEBUG] ")
}

func main() {

	db := database.GetDB()
	defer database.CloseDB()

	if err := db.Ping(); err != nil {
		log.Println("不能连接数据库！")
		log.Println(err.Error())
		log.Println("Server exit!")
		return
	}

	//gin.SetMode(gin.ReleaseMode)
	//logFile,_ := os.Create("fm.log")
	//gin.DefaultWriter = io.Writer(logFile)

	//创建一个路由
	r := gin.Default()

	//新增一个用户路由组，用于注册，登录，更新用户数据以及删除用户
	user := r.Group("/user")
	{
		user.POST("/register", api.RegisterHandler)
		user.POST("/login", api.LoginHandler)
		user.Use(api.NeedToken) //更新和删除用户需要已登录，检查用户令牌
		user.POST("/update", api.UpdateUserHandler)
		user.DELETE("/delete", api.DelUserHandler)
		user.GET("/query", api.QueryUserHandler)
	}

	//新增一个账户路由组，用于处理新增账户，删除账户，更新账户余额
	account := r.Group("/account")
	{
		account.Use(api.NeedToken) //操作需要用户已登录，检查用户令牌
		account.POST("/new", api.NewAccountHandler)
		account.POST("/del", api.DelAccountHandler)
		account.GET("/query", api.QueryAccountsHandler)
	}

	//新增一个路由组用于记账
	accountLog := r.Group("/log")
	{
		accountLog.Use(api.NeedToken)
		accountLog.POST("/new", api.NewAccountsLogHandler)
		accountLog.POST("/del", api.DelAccountsLogHandler)
		accountLog.GET("/query", api.QueryAccountsLogHandler)
	}

	//新增一个路由组用于管理机构
	org := r.Group("/org")
	{
		org.Use(api.NeedToken)
		org.POST("/new", api.NewOrgHandler)
		org.POST("/del", api.DelOrgHandler)
		org.GET("/query", api.QueryOrgHandler)
	}

	//新增一个路由组用于管理人员
	person := r.Group("/person")
	{
		person.Use(api.NeedToken)
		person.POST("/new", api.NewPersonHandler)
		person.POST("/del", api.DelPersonHandler)
		person.GET("/query", api.QueryPersonHandler)
	}

	//新增一个路由用于管理收入明细表
	income := r.Group("/income")
	{
		income.Use(api.NeedToken)
		income.POST("/new", api.NewIncomeHandler)
		income.POST("/del", api.DelIncomeHandler)
		income.GET("query", api.QueryIncomeHandler)
	}

	//新增一个路由用于客理支出明细表
	expense := r.Group("/expense")
	{
		expense.Use(api.NeedToken)
		expense.POST("/new", api.NewExpenseHandler)
		expense.POST("/del", api.DelExpenseHandler)
		expense.GET("/query", api.QueryExpenseHandler)
	}

	//启动服务
	err := r.Run(":8080")
	if err != nil {
		log.Println("Error in r.Run()!")
	}

}
